package jp.mydns.sys1yagi.android.svgandroidsample; import android.annotation.TargetApi; import android.app.Activity; import android.graphics.Matrix; import android.os.Build; import android.os.Build.VERSION; import android.os.Bundle; import android.view.MotionEvent; import android.view.ScaleGestureDetector; import android.view.ScaleGestureDetector.OnScaleGestureListener; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; import com.larvalabs.svgandroid.SVG; import com.larvalabs.svgandroid.SVGParser; public class SvgAndroidSampleActivity extends Activity implements OnScaleGestureListener { private ImageView mImageView = null; private Matrix mMatrix = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_svg_android_sample); mMatrix = new Matrix(); mImageView = (ImageView) findViewById(R.id.image); checkLayer(mImageView); SVG svg = SVGParser.getSVGFromResource(getResources(), R.raw.cute_fox); mImageView.setImageDrawable(svg.createPictureDrawable()); mImageView.setImageMatrix(mMatrix); final ScaleGestureDetector detector = new ScaleGestureDetector(this, this); mImageView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return detector.onTouchEvent(event); } }); } @Override public boolean onScale(ScaleGestureDetector detector) { float scale = detector.getScaleFactor(); mMatrix.postScale(scale, scale); mImageView.setImageMatrix(mMatrix); return true; } @Override public boolean onScaleBegin(ScaleGestureDetector detector) { return true; } @Override public void onScaleEnd(ScaleGestureDetector detector) { // 何もしない } @TargetApi(11) private void switchLayer(View view) { view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); } /** * AndroidManifest.xmlのactivity要素の属性にandroid:hardwareAccelerated="false" * を設定するか、 SVGをレンダリングするViewをこのメソッドに渡してレイヤをソフトウェアにする必要があります。 * * @param view */ private void checkLayer(View view) { if (VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { switchLayer(view); } } }